package com.zhouhong.muke_leetcode;

import java.util.Stack;

/**
 * @ClassName: Algorithm-and-Data-Structure
 * @Description:
 * @Author: zhouhong
 * @Create: 2021-04-04 17:22
 **/
//设计一个支持 push ，pop ，top 操作，并能在常数时间内检索到最小元素的栈。
//
//
// push(x) —— 将元素 x 推入栈中。
// pop() —— 删除栈顶的元素。
// top() —— 获取栈顶元素。
// getMin() —— 检索栈中的最小元素。

public class LeetCode0155 {
    // 维护记录栈中的最小值
    Integer min = Integer.MAX_VALUE;
    Stack<Integer> stack = new Stack<>();

    public void push(int val) {
        // 如果要压入栈中的元素小于等于当前栈中的最小元素：更新现在的最小记录，将元素压入栈中
        if (val <= min){
            stack.push(min);
            min = val;
        }
        stack.push(val);
    }
    // 如果弹出的元素为最小元素，弹出后更新最小记录
    public void pop() {
        if (stack.pop() == min){
            min = stack.pop();
        }
    }
    public int top() {
        return stack.peek();
    }
    public int getMin() {
        return min;
    }
}
